package co.gov.medellin.sdep.sisdep.admin.service;

import java.sql.SQLException;
import java.util.List;

import co.gov.medellin.sdep.sisdep.admin.exception.ValueObjectException;
import co.gov.medellin.sdep.sisdep.common.SISDEPException;
import co.gov.medellin.sdep.sisdep.common.dto.GenericComponentVO;
import co.gov.medellin.sdep.sisdep.common.dto.GenericComponentValueVO;

public interface IValueObjectService {

	/**
	 * Obtiene el mapa que contiene los datos asociados a cada uno de los componentes genericos de BCOPO.
	 * @return HashMap Mapa con las listas de los componentes genericos y sus valores asociados.
	 * antes era: public HashMap getGenericComponents() throws SQLException;
	 * ahora es: public List getGenericComponents() throws SQLException;
	 * @throws SQLException
	 */
	List getGenericComponents() throws ValueObjectException;
	
	/**
	 * Metodo que permite obtener el listado de Tipos definidos en el sistema. Es posible
	 * buscar por parte del nombre del tipo. Para obternerlos todos se una el % en como
	 * valor del parametro de la consulta.
	 *  
	 * @author carlos.perez@consult-soft.com  03-02-2012
	 * @param genCompVO
	 * @return
	 * @throws SISDEPException
	 */
	List loadTypeMasterList(GenericComponentVO genCompVO) throws ValueObjectException;
	
	/**
	 * Metodo que permite la actualizacion de los datos un TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  06-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void updateTypeMasterList(GenericComponentVO genCompVO) throws ValueObjectException;

	/**
	 * Metodo que permite la insercion de los datos de un nuevo TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  06-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void saveTypeMasterList(GenericComponentVO genCompVO) throws ValueObjectException;

	/**
	 * Metodo que permite obtener el listado de Valores para un Tipo definido en el sistema. Es posible
	 * buscar por parte del nombre del valor tipo. Para obternerlos todos se una el % en como
	 * valor del parametro de la consulta.
	 *  
	 * @author carlos.perez@consult-soft.com  07-02-2012
	 * @param genCompVO
	 * @return
	 * @throws SISDEPException
	 */
	List loadTypeValueMasterList(GenericComponentValueVO gcvSearchVO) throws ValueObjectException;
	
	/**
	 * Metodo que permite la actualizacion de los datos un VALOR TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  07-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void updateTypeValueMasterList(GenericComponentValueVO gcvVO) throws ValueObjectException;

	/**
	 * Metodo que permite la insercion de los datos de un nuevo VALOR TIPO en la lista maestra.
	 * @author carlos.perez@consult-soft.com  07-02-2012 
	 * @param genCompVO
	 * @throws SISDEPException
	 */
	void saveTypeValueMasterList(GenericComponentValueVO gcvVO) throws ValueObjectException;
	
	/**
	 * 
	 * Metodo que permite consultar un objeto Tipo usando su ID.
	 * @author carlos.perez@consult-soft.com  18-04-2012 
	 * @param id
	 * @throws SISDEPException
	 */
	GenericComponentVO getType(String idType) throws ValueObjectException;
	
	/**
	 * 
	 * Metodo que permite consultar un objeto Valor Tipo usando su ID.
	 * @author carlos.perez@consult-soft.com  18-04-2012 
	 * @param id
	 * @throws SISDEPException
	 */
	GenericComponentValueVO getTypeValue(String idTypeValue) throws ValueObjectException;

	/**
	 * 
	 * Metodo que permite consultar un objeto Valor Tipo usando el Id del Tipo y su Codigo (en base de
	 * datos corresponde al Valor).
	 * 
	 * @author carlos.perez@consult-soft.com  
	 * @version 19-06-2012
	 * 
	 * @param idType
	 * @param typeValueCode
	 * @throws ValueObjectException
	 */
	GenericComponentValueVO getTypeValueByCode(String idType, String typeValueCode) throws ValueObjectException;

}
